home *** CD-ROM | disk | FTP | other *** search
- /* $VER: CD2M2.rexx 00.01 (03.04.93) © S.Sürken */
- /* */
- /* Creates a Modula-2 Definition and Implementation file out of a */
- /* language description file */
- /* */
- /* Will automatically add a "Version" constant to source file. */
- /* */
-
- /* INITIALIZATION */
- modName = "VMDefaultStrings"; /* change this to your needs */
- strVar = "str" /* change this to your needs */
-
- inputName = WORD(ARG(1), 1)
- defOutputName = WORD(ARG(1), 2)
- impOutputName = WORD(ARG(1), 3)
- /* END INITIALIZATION */
-
- /* CONTINUE WITH INIT? */
- SAY "Input CD-File: "inputName
- SAY "Output Def-File: "defOutputName
- SAY "Output Imp-File: "impOutputName
-
- SAY "Sure to continue? "
- IF UPPER(READCH(STDIN, 1)) ~= "Y"
- THEN DO
- SAY "Cancelled."; EXIT 10 /* user cancel */
- END
- /* END CONTINUE WITH INIT? */
-
- /* OPEN FILES */
- IF OPEN(input, inputName, read) & OPEN(defOutput, defOutputName, write) & OPEN(impOutput, impOutputName, write)
- THEN SAY "Files correctly opened, please wait..."
- ELSE DO
- SAY "File error."; EXIT 10 /* error cancel */
- END
- /* END OPEN FILES */
-
- /* READ VERSION */
- DO UNTIL (Kind(line) = 3) /* Version! */
- line = READLN(input)
- END
- version = SUBSTR(line, POS("$VER:", line))
-
- SAY "Descriptor-Version "version /* full version (text) */
- version = TRUNC(WORD(version, 3))
- SAY "Descriptor-Main-Version "version /* main version (number) */
- /* END READ VERSION */
-
- /* WRITE DEF-HEAD */
- CALL WRITELN(defOutput, "DEFINITION MODULE "modName";")
- CALL AutoProduced(defOutput)
- CALL WRITELN(defOutput, "IMPORT S: SYSTEM;")
- CALL WRITELN(defOutput, "")
- CALL WRITELN(defOutput, "CONST version = "version";") /* main version */
- CALL WRITELN(defOutput, "")
- /* END WRITE DEF-HEAD */
-
- /* WRITE IMP-HEAD */
- CALL WRITELN(impOutput, "IMPLEMENTATION MODULE "modName";")
- CALL AutoProduced(defOutput)
- CALL WRITELN(impOutput, "IMPORT S: SYSTEM;")
- CALL WRITELN(impOutput, "")
- CALL WRITELN(impOutput, "BEGIN")
- CALL WRITELN(impOutput, "")
- /* END WRITE IMP-HEAD */
-
- /* GENERATE OUTPUT */
- code = -1
- DO WHILE ~EOF(input)
- line = READLN(input)
-
- IF Kind(line) = 2
- THEN DO
- id = WORD(line, 1)
- text = READLN(input)
-
- IF COMPARE(id, "") ~= 0
- THEN DO
- code = code+1
- /*SAY "Generating Code "code*/
- CALL WRITELN(defOutput, id"="code";")
- CALL WRITELN(impOutput, strVar"["id"] := S.ADR('"text"');")
- END
- END
- END
- /* END GENERATE OUTPUT */
-
- /* WRITE DEF-FOOT */
- CALL WRITELN(defOutput, "")
- CALL WRITELN(defOutput, "CONST max="code";")
- CALL WRITELN(defOutput, "")
- CALL WRITELN(defOutput, "VAR str: ARRAY [0..max] OF S.ADDRESS;")
- CALL WRITELN(defOutput, "")
- CALL WRITELN(defOutput, "END "modName".")
- /* END WRITE DEF-FOOT */
-
- /* WRITE IMP-FOOT */
- CALL WRITELN(impOutput, "")
- CALL WRITELN(impOutput, "END "modName".")
- /* END WRITE IMP-FOOT */
-
- /* OUT STATUS */
- SAY ""
- SAY "Codes from 0 to "code", altogether "code+1" Strings."
- SAY ""
- /* END OUT STATUS */
-
- EXIT 0 /* done exit */
-
-
- /* MACROS */
-
- /* Kind(text) --> whatKind */
- Kind: SELECT
- WHEN POS("#", ARG(1)) = 1
- THEN RETURN 0 /* a command */
- WHEN POS("$VER:", UPPER(ARG(1))) ~= 0
- THEN RETURN 3 /* the version line */
- WHEN POS(";", ARG(1)) = 1
- THEN RETURN 1 /* a comment */
- OTHERWISE RETURN 2 /* a relevant line */
- END
-
- /* AutoProduced(file) --> SIDE: write text to file */
- AutoProduced: DO
- CALL WRITELN(ARG(1), "(*")
- CALL WRITELN(ARG(1), "This file was automatically produced by CD2M2.")
- CALL WRITELN(ARG(1), "Do not edit by hand.")
- CALL WRITELN(ARG(1), "CD2M2 is an AREXX-Script by © S.Sürken.")
- CALL WRITELN(ARG(1), "*)")
- RETURN
- END
-